Skip to content

release(v0.20.0): 知识完备性 — Vault 图遍历 / 历史追踪 / 检索质量 / Block 引用#39

Merged
juice094 merged 11 commits into
mainfrom
feat/v0.20.0-vault-graph-traversal
May 14, 2026
Merged

release(v0.20.0): 知识完备性 — Vault 图遍历 / 历史追踪 / 检索质量 / Block 引用#39
juice094 merged 11 commits into
mainfrom
feat/v0.20.0-vault-graph-traversal

Conversation

@juice094
Copy link
Copy Markdown
Owner

v0.20.0 Release

Sprint E — Vault 历史追踪

  • : git2 revwalk + blob diff 行级统计

Sprint F — 检索质量监控

  • : (latency/recall/overlap/source)

Sprint G — Block 引用

  • : /
    • broken block ref 检测

Sprint C — 性能基线

  • 回归测试: 1k<200ms, 10k<500ms
  • Redis ADR: 放弃引入

Sprint H — Release Hardening

  • 文档统一: README / AGENTS / ROADMAP 版本号同步
  • 68 MCP tools, 451 tests, Schema 34

架构原则

  • Client-Agnostic Principle 落地: 零硬编码客户端路径

  • [x]
    running 456 tests
    test arxiv::tests::test_parse_arxiv_atom_invalid_xml ... ok
    test arxiv::tests::test_parse_arxiv_atom_missing_title ... ok
    test arxiv::tests::test_parse_arxiv_atom_no_authors ... ok
    test arxiv::tests::test_parse_arxiv_atom_success ... ok
    test asyncgit::tests::test_async_notification_variants ... ok
    test asyncgit::tests::test_async_repo_status_clone ... ok
    test asyncgit::tests::test_async_single_job_new ... ok
    test asyncgit::tests::test_repo_status_notification_clone ... ok
    test asyncgit::tests::test_sync_progress_notification_clone ... ok
    test backup::tests::test_backup_filename_contains_timestamp ... ok
    test backup::tests::test_backup_filename_format ... ok
    test backup::tests::test_clean_old_backups_removes_oldest ... ok
    test backup::tests::test_export_sqlite_creates_file ... ok
    test config::tests::test_config_custom_values ... ok
    test config::tests::test_config_default ... ok
    test config::tests::test_config_empty_uses_defaults ... ok
    test config::tests::test_config_serialize_roundtrip ... ok
    test daemon::tests::test_daemon_new ... ok
    test dependency_graph::tests::test_parse_cargo_toml_deps ... ok
    test dependency_graph::tests::test_parse_cmake_add_subdirectory_local ... ok
    test dependency_graph::tests::test_parse_cmake_fetchcontent_declare ... ok
    test dependency_graph::tests::test_parse_cmake_find_package ... ok
    test dependency_graph::tests::test_parse_cmake_target_link_libraries ... ok
    test dependency_graph::tests::test_parse_go_mod_deps ... ok
    test dependency_graph::tests::test_parse_package_json_deps ... ok
    test dependency_graph::tests::test_parse_pyproject_toml_deps ... ok
    test dependency_graph::tests::test_parse_requirements_txt_deps ... ok
    test digest::tests::test_generate_daily_digest_empty ... ok
    test digest::tests::test_generate_daily_digest_with_repos ... ok
    test digest::tests::test_generate_daily_digest_with_unhealthy_repo ... ok
    test discovery_engine::tests::test_discover_dependencies_cargo ... ok
    test discovery_engine::tests::test_discover_dependencies_go_mod ... ok
    test discovery_engine::tests::test_discover_dependencies_no_manifest ... ok
    test discovery_engine::tests::test_discover_dependencies_package_json ... ok
    test discovery_engine::tests::test_discover_similar_projects ... ok
    test discovery_engine::tests::test_normalize_dep_name ... ok
    test health::tests::test_compute_workspace_hash_changes_with_content ... ok
    test health::tests::test_compute_workspace_hash_empty_dir ... ok
    test health::tests::test_compute_workspace_hash_ignores_dirs ... ok
    test health::tests::test_fmt_version_bun ... ok
    test health::tests::test_fmt_version_cargo ... ok
    test health::tests::test_fmt_version_cmake ... ok
    test health::tests::test_fmt_version_docker ... ok
    test health::tests::test_fmt_version_go ... ok
    test health::tests::test_fmt_version_java ... ok
    test health::tests::test_fmt_version_python ... ok
    test health::tests::test_fmt_version_rustc ... ok
    test health::tests::test_fmt_version_single_word ... ok
    test health::tests::test_fmt_version_unknown ... ok
    test i18n::en::tests::test_build ... ok
    test i18n::tests::test_en_build ... ok
    test i18n::tests::test_format_template_basic ... ok
    test i18n::tests::test_format_template_extra_args_ignored ... ok
    test i18n::tests::test_format_template_multiple ... ok
    test i18n::tests::test_format_template_no_placeholder ... ok
    test i18n::tests::test_from_language_en ... ok
    test i18n::tests::test_log_strings_loaded_repos ... ok
    test i18n::tests::test_log_strings_status_fmt ... ok
    test i18n::tests::test_zh_build ... ok
    test i18n::zh_cn::tests::test_build ... ok
    test knowledge_engine::index::tests::test_prepare_repos_empty_path_returns_all ... ok
    test knowledge_engine::index::tests::test_prepare_repos_matching_path_returns_one ... ok
    test knowledge_engine::index::tests::test_prepare_repos_nonexistent_path_errors ... ok
    test knowledge_engine::index::tests::test_prepare_repos_unregistered_existing_path_auto_registers ... ok
    test knowledge_engine::index::tests::test_save_and_get_repo_index_state ... ok
    test knowledge_engine::index_state::tests::test_get_repo_index_state_fresh ... ok
    test knowledge_engine::index_state::tests::test_get_repo_index_state_missing ... ok
    test knowledge_engine::index_state::tests::test_get_repo_index_state_stale ... ok
    test knowledge_engine::index_state::tests::test_get_repo_index_state_unknown_not_git ... ok
    test knowledge_engine::index_state::tests::test_index_state_is_fresh_and_changed_count ... ok
    test knowledge_engine::index_state::tests::test_index_state_variants_serialize ... ok
    test knowledge_engine::readme::tests::test_build_llm_prompt_contains_json_instruction ... ok
    test knowledge_engine::readme::tests::test_extract_module_structure_for_devbase ... ok
    test knowledge_engine::readme::tests::test_extract_module_structure_non_rust ... ok
    test knowledge_engine::readme::tests::test_extract_readme_summary_basic ... ok
    test knowledge_engine::readme::tests::test_extract_readme_summary_truncates_at_sentence ... ok
    test knowledge_engine::readme::tests::test_extract_readme_summary_with_badges ... ok
    test knowledge_engine::readme::tests::test_fallback_summary_cargo_toml ... ok
    test knowledge_engine::readme::tests::test_module_info_clone ... ok
    test knowledge_engine::readme::tests::test_parse_llm_json_markdown_fenced ... ok
    test knowledge_engine::readme::tests::test_parse_llm_json_valid ... ok
    test knowledge_engine::readme::tests::test_real_gitui_repo ... ignored, integration test on real gitui repo
    test knowledge_engine::readme::tests::test_real_syncthing_repo ... ignored, integration test on real syncthing repo
    test knowledge_engine::readme::tests::test_try_llm_summary_disabled_returns_none ... ok
    test mcp::tests::test_destructive_gate_disabled_by_default ... ok
    test mcp::tests::test_destructive_gate_enabled ... ok
    test mcp::tests::test_format_mcp_message ... ok
    test mcp::tests::test_initialize ... ok
    test mcp::tests::test_nl_filter_repos_empty_query_returns_empty ... ok
    test mcp::tests::test_nl_filter_repos_fallback_finds_by_language ... ok
    test mcp::tests::test_nl_filter_repos_tantivy_finds_devbase ... ok
    test mcp::tests::test_parse_tool_tiers ... ok
    test mcp::tests::test_parse_tool_tiers_empty ... ok
    test mcp::tests::test_stdio_content_length_format ... ok
    test mcp::tests::test_tools_call_devkit_arxiv_fetch ... ok
    test mcp::tests::test_tools_call_devkit_health ... ok
    test mcp::tests::test_tools_call_devkit_project_context ... ok
    test mcp::tests::test_tools_call_devkit_query ... ok
    test mcp::tests::test_tools_call_devkit_skill_discover ... ok
    test mcp::tests::test_tools_call_devkit_skill_list ... ok
    test mcp::tests::test_tools_call_devkit_skill_run ... ignored, requires knowledge-report skill installed and may run external Python process
    test mcp::tests::test_tools_call_devkit_skill_search ... ok
    test mcp::tests::test_tools_call_unknown_tool ... ok
    test mcp::tests::test_tools_list ... ok
    test mcp::tests::test_unknown_method ... ok
    test mcp::tools::brief::tests::test_name ... ok
    test mcp::tools::context::tests::test_collect_hot_files_basic ... ok
    test mcp::tools::context::tests::test_collect_hot_files_empty_repo ... ok
    test mcp::tools::context::tests::test_collect_hot_files_no_git ... ok
    test mcp::tools::context::tests::test_collect_recent_commits_basic ... ok
    test mcp::tools::context::tests::test_collect_recent_commits_empty_repo ... ok
    test mcp::tools::context::tests::test_collect_recent_commits_limit ... ok
    test mcp::tools::context::tests::test_name ... ok
    test mcp::tools::context::tests::test_schema_is_object ... ok
    test mcp::tools::evaluate::tests::test_evaluate_tool_name ... ok
    test mcp::tools::evaluate::tests::test_truncate_output ... ok
    test mcp::tools::impact::tests::test_name ... ok
    test mcp::tools::known_limit::tests::test_name ... ok
    test mcp::tools::known_limit::tests::test_schema_is_object ... ok
    test mcp::tools::oplog::tests::test_name ... ok
    test mcp::tools::oplog::tests::test_schema_is_object ... ok
    test mcp::tools::query::tests::test_name ... ok
    test mcp::tools::query::tests::test_schema_is_object ... ok
    test mcp::tools::relations::tests::test_relation_query_bidirectional ... ok
    test mcp::tools::relations::tests::test_relation_store_and_query_roundtrip ... ok
    test mcp::tools::relations::tests::test_relation_store_missing_required_fields ... ok
    test mcp::tools::repo::tests::test_extract_tag_from_query ... ok
    test mcp::tools::repo::tests::test_parse_github_repo_https ... ok
    test mcp::tools::repo::tests::test_parse_github_repo_invalid ... ok
    test mcp::tools::repo::tests::test_parse_github_repo_ssh ... ok
    test mcp::tools::repo::tests::test_parse_stars_condition ... ok
    test mcp::tools::search::tests::test_parse_f32_array ... ok
    test mcp::tools::session::tests::test_schemas_are_objects ... ok
    test mcp::tools::session::tests::test_session_tool_names ... ok
    test mcp::tools::skill::tests::test_name ... ok
    test mcp::tools::skill::tests::test_schema_is_object ... ok
    test mcp::tools::tests::test_tool_modules_compile ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_absolute_blocked ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_dotdot_within_bounds ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_empty ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_nested ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_normal ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_performance ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_traversal_blocked ... ok
    test mcp::tools::vault::tests::test_resolve_vault_path_with_dot ... ok
    test mcp::tools::vault::tests::test_vault_daily_appends_to_existing ... ok
    test mcp::tools::vault::tests::test_vault_daily_creates_file ... ok
    test mcp::tools::vault::tests::test_vault_graph_basic ... ok
    test mcp::tools::vault::tests::test_vault_graph_bfs_traversal ... ok
    test mcp::tools::vault::tests::test_vault_graph_filtered_by_repo ... ok
    test mcp::tools::vault::tests::test_vault_history_tool ... ok
    test mcp::tools::workflow::tests::test_workflow_list_empty_registry ... ok
    test mcp::tools::workflow::tests::test_workflow_run_not_found ... ok
    test mcp::tools::workflow::tests::test_workflow_status_invalid_id ... ok
    test oplog_analytics::tests::test_generate_report_empty_db ... ok
    test oplog_analytics::tests::test_generate_report_with_data ... ok
    test query::tests::test_eval_behind_match ... ok
    test query::tests::test_eval_behind_no_match ... ok
    test query::tests::test_eval_keyword_match ... ok
    test query::tests::test_eval_keyword_no_match ... ok
    test query::tests::test_eval_note_match ... ok
    test query::tests::test_eval_note_no_match ... ok
    test query::tests::test_eval_stale_never_synced ... ok
    test query::tests::test_eval_tag_match ... ok
    test query::tests::test_eval_tag_no_match ... ok
    test query::tests::test_parse_cmp_expr_empty ... ok
    test query::tests::test_parse_cmp_expr_eq_implicit ... ok
    test query::tests::test_parse_cmp_expr_gt ... ok
    test query::tests::test_parse_query_behind ... ok
    test query::tests::test_parse_query_keyword ... ok
    test query::tests::test_parse_query_lang ... ok
    test query::tests::test_parse_query_multiple ... ok
    test query::tests::test_parse_query_note ... ok
    test query::tests::test_parse_query_stale ... ok
    test query::tests::test_parse_query_tag ... ok
    test registry::agent_context::tests::test_cascade_delete ... ok
    test registry::agent_context::tests::test_context_crud ... ok
    test registry::agent_context::tests::test_entity_links ... ok
    test registry::agent_context::tests::test_get_context_with_memories ... ok
    test registry::agent_context::tests::test_memory_crud ... ok
    test registry::agent_context::tests::test_missing_context ... ok
    test registry::code_symbols::tests::test_query_code_symbols_by_file ... ok
    test registry::code_symbols::tests::test_query_code_symbols_by_name ... ok
    test registry::code_symbols::tests::test_query_code_symbols_by_symbol_type ... ok
    test registry::code_symbols::tests::test_query_code_symbols_limit ... ok
    test registry::code_symbols::tests::test_query_code_symbols_no_filter ... ok
    test registry::dead_code::tests::test_query_dead_code_basic ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_called ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_main ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_pub_when_not_include_pub ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_test_attribute ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_test_prefix ... ok
    test registry::dead_code::tests::test_query_dead_code_excludes_tests_rs ... ok
    test registry::knowledge::tests::test_cross_repo_search_symbols ... ok
    test registry::knowledge::tests::test_find_papers_by_venue ... ok
    test registry::knowledge::tests::test_find_related_symbols ... ok
    test registry::knowledge::tests::test_module_crud ... ok
    test registry::knowledge::tests::test_paper_roundtrip ... ok
    test registry::knowledge::tests::test_save_embeddings ... ok
    test registry::knowledge::tests::test_save_summary_smoke ... ok
    test registry::knowledge::tests::test_semantic_search_symbols ... ok
    test registry::knowledge::tests::test_symbol_read_tracking ... ok
    test registry::knowledge_meta::tests::test_knowledge_meta_crud ... ok
    test registry::known_limits::tests::test_known_limit_crud ... ok
    test registry::known_limits::tests::test_list_known_limits_by_category ... ok
    test registry::links::tests::test_get_linked_repos ... ok
    test registry::links::tests::test_get_linked_repos_empty ... ok
    test registry::links::tests::test_get_linked_repos_full ... ok
    test registry::links::tests::test_get_linked_vault_notes ... ok
    test registry::links::tests::test_get_linked_vaults ... ok
    test registry::migrate::tests::test_db_path_format ... ok
    test registry::migrate::tests::test_workspace_dir_format ... ok
    test registry::repo::tests::test_list_repos_empty ... ok
    test registry::repo::tests::test_list_repos_need_index ... ok
    test registry::repo::tests::test_list_repos_stale_health ... ok
    test registry::repo::tests::test_list_workspaces_by_tier ... ok
    test registry::repo::tests::test_save_and_list_repo ... ok
    test registry::repo::tests::test_save_repo_updates_existing ... ok
    test registry::repo::tests::test_save_repo_with_remotes ... ok
    test registry::repo::tests::test_save_repo_with_stars ... ok
    test registry::repo::tests::test_save_repo_with_tags ... ok
    test registry::repo::tests::test_update_repo_language ... ok
    test registry::repo::tests::test_update_repo_last_synced_at ... ok
    test registry::repo::tests::test_update_repo_tier ... ok
    test registry::repo::tests::test_update_repo_workspace_type ... ok
    test registry::repos_toml::tests::test_apply_overrides ... ok
    test registry::repos_toml::tests::test_parse_repos_toml ... ok
    test registry::test_helpers::tests::test_agent_contexts_table_exists ... ok
    test registry::test_helpers::tests::test_agent_memories_table_exists ... ok
    test registry::test_helpers::tests::test_in_memory_schema_version ... ok
    test registry::test_helpers::tests::test_knowledge_meta_table_exists ... ok
    test registry::test_helpers::tests::test_known_limits_table_exists ... ok
    test registry::test_helpers::tests::test_workflow_executions_table_exists ... ok
    test registry::tests::test_dead_code_excludes_pub_variants_and_main ... ok
    test registry::tests::test_dead_code_include_pub ... ok
    test registry::tests::test_oplog_event_type_roundtrip ... ok
    test registry::tests::test_oplog_migration_compat ... ok
    test registry::tests::test_oplog_save_and_list ... ok
    test registry::tests::test_primary_remote_fallback_to_first ... ok
    test registry::tests::test_primary_remote_none ... ok
    test registry::tests::test_primary_remote_prefers_origin ... ok
    test registry::tests::test_stars_cache_miss ... ok
    test registry::tests::test_stars_cache_roundtrip ... ok
    test registry::tests::test_stars_cache_update ... ok
    test registry::vault::tests::test_delete_vault_note ... ok
    test registry::vault::tests::test_list_vault_notes_empty ... ok
    test registry::vault::tests::test_save_and_list_vault_note ... ok
    test scan::tests::test_detect_language_cpp ... ok
    test scan::tests::test_detect_language_go ... ok
    test scan::tests::test_detect_language_node ... ok
    test scan::tests::test_detect_language_none ... ok
    test scan::tests::test_detect_language_python_pyproject ... ok
    test scan::tests::test_detect_language_python_requirements ... ok
    test scan::tests::test_detect_language_rust ... ok
    test scan::tests::test_discover_repos_devbase_ignore ... ok
    test scan::tests::test_discover_repos_excludes_paths ... ok
    test scan::tests::test_discover_repos_excludes_patterns ... ok
    test scan::tests::test_discover_repos_finds_non_git_workspaces ... ok
    test scan::tests::test_inspect_non_git_workspace_generic ... ok
    test scan::tests::test_inspect_non_git_workspace_openclaw ... ok
    test scan::tests::test_is_excluded_path_sync_context ... ok
    test scan::tests::test_is_nested_submodule_false ... ok
    test scan::tests::test_is_nested_submodule_true ... ok
    test scan::tests::test_normal_tags ... ok
    test scan::tests::test_parse_github_owner_repo_https ... ok
    test scan::tests::test_parse_github_owner_repo_invalid ... ok
    test scan::tests::test_parse_github_owner_repo_non_github ... ok
    test scan::tests::test_parse_github_owner_repo_ssh ... ok
    test scan::tests::test_zip_snapshot_tags_main ... ok
    test scan::tests::test_zip_snapshot_tags_master ... ok
    test search::hybrid::tests::test_hybrid_search_fallback_to_keyword ... ok
    test search::hybrid::tests::test_hybrid_search_symbols_with_metrics ... ok
    test search::hybrid::tests::test_keyword_search_basic ... ok
    test search::hybrid::tests::test_keyword_search_latency_regression_10k ... ignored, performance regression: run with --ignored to execute
    test search::hybrid::tests::test_keyword_search_latency_regression_1k ... ignored, performance regression: run with --ignored to execute
    test search::hybrid::tests::test_rrf_merge_empty_lists ... ok
    test search::hybrid::tests::test_rrf_merge_single_list_passthrough ... ok
    test search::hybrid::tests::test_rrf_merge_two_lists ... ok
    test search::symbol_index::tests::test_add_and_search_symbol ... ok
    test search::symbol_index::tests::test_delete_repo_symbols ... ok
    test search::symbol_index::tests::test_search_signature_match ... ok
    test search::tests::test_add_and_search_repo ... ok
    test search::tests::test_add_vault_doc ... ok
    test search::tests::test_build_schema ... ok
    test search::tests::test_delete_repo_doc ... ok
    test search::tests::test_index_is_empty ... ok
    test search::tests::test_list_indexed_repo_ids ... ok
    test search::tests::test_search_repos ... ok
    test search::tests::test_search_vault ... ok
    test search::tests::test_sync_index_to_db_removes_orphans ... ok
    test semantic_index::git_diff::tests::test_current_head_hash_after_commit ... ok
    test semantic_index::git_diff::tests::test_current_head_hash_empty_repo ... ok
    test semantic_index::git_diff::tests::test_diff_since_deleted_file ... ok
    test semantic_index::git_diff::tests::test_diff_since_no_changes ... ok
    test semantic_index::git_diff::tests::test_diff_since_none_first_index ... ok
    test semantic_index::git_diff::tests::test_diff_since_with_last_hash ... ok
    test semantic_index::git_diff::tests::test_diff_since_workdir_modification ... ok
    test semantic_index::git_diff::tests::test_diff_since_workdir_untracked ... ok
    test semantic_index::persist::tests::test_delete_symbols_for_files ... ok
    test semantic_index::persist::tests::test_save_calls_incremental ... ok
    test semantic_index::persist::tests::test_save_calls_replaces_old ... ok
    test semantic_index::persist::tests::test_save_symbols_incremental ... ok
    test semantic_index::persist::tests::test_save_symbols_replaces_old ... ok
    test semantic_index::symbol::tests::test_extract_rust_attributes ... ok
    test semantic_index::tests::test_extract_go_const ... ok
    test semantic_index::tests::test_extract_go_function ... ok
    test semantic_index::tests::test_extract_go_method ... ok
    test semantic_index::tests::test_extract_go_struct_and_interface ... ok
    test semantic_index::tests::test_extract_js_function ... ok
    test semantic_index::tests::test_extract_multiple_rust ... ok
    test semantic_index::tests::test_extract_python_class ... ok
    test semantic_index::tests::test_extract_python_function ... ok
    test semantic_index::tests::test_extract_python_multiple ... ok
    test semantic_index::tests::test_extract_rust_function ... ok
    test semantic_index::tests::test_extract_rust_struct ... ok
    test semantic_index::tests::test_extract_ts_class_and_interface ... ok
    test semantic_index::tests::test_extract_ts_enum ... ok
    test semantic_index::tests::test_index_repo_full ... ok
    test semantic_index::tests::test_save_calls ... ok
    test semantic_index::tests::test_save_symbols ... ok
    test skill_runtime::clarity_sync::tests::test_conflict_resolution_skips_older_devbase_skill ... ok
    test skill_runtime::clarity_sync::tests::test_conflict_resolution_updates_when_devbase_newer ... ok
    test skill_runtime::clarity_sync::tests::test_sync_skills_to_clarity ... ok
    test skill_runtime::dependency::tests::test_detect_cycle_direct ... ok
    test skill_runtime::dependency::tests::test_detect_cycle_none ... ok
    test skill_runtime::dependency::tests::test_resolve_cycle_fails ... ok
    test skill_runtime::dependency::tests::test_resolve_topological_order ... ok
    test skill_runtime::dependency::tests::test_validate_dependencies_all_satisfied ... ok
    test skill_runtime::dependency::tests::test_validate_dependencies_missing ... ok
    test skill_runtime::discover::tests::test_generate_entry_script_node ... ok
    test skill_runtime::discover::tests::test_generate_entry_script_python ... ok
    test skill_runtime::discover::tests::test_generate_entry_script_rust ... ok
    test skill_runtime::discover::tests::test_generate_skill_md_structure ... ok
    test skill_runtime::executor::tests::test_external_embedding_endpoint_error_response ... ok
    test skill_runtime::executor::tests::test_external_embedding_endpoint_ollama_parsing ... ok
    test skill_runtime::executor::tests::test_hard_veto_guard_empty_registry ... ok
    test skill_runtime::executor::tests::test_hard_veto_guard_with_unresolved_vetoes ... ok
    test skill_runtime::executor::tests::test_resolve_interpreter_binary ... ok
    test skill_runtime::executor::tests::test_resolve_interpreter_powershell ... ok
    test skill_runtime::executor::tests::test_resolve_interpreter_python ... ok
    test skill_runtime::executor::tests::test_resolve_interpreter_shell ... ok
    test skill_runtime::executor::tests::test_run_skill_not_found ... ok
    test skill_runtime::executor::tests::test_run_skill_success ... ok
    test skill_runtime::publish::tests::test_get_default_remote_fallback ... ok
    test skill_runtime::publish::tests::test_get_default_remote_origin ... ok
    test skill_runtime::publish::tests::test_push_tag_no_remote ... ok
    test skill_runtime::publish::tests::test_push_tag_success_to_bare_remote ... ok
    test skill_runtime::registry::tests::test_execution_tracking ... ok
    test skill_runtime::registry::tests::test_install_and_get_skill ... ok
    test skill_runtime::registry::tests::test_list_skills_by_type ... ok
    test skill_runtime::registry::tests::test_search_skills_text ... ok
    test skill_runtime::registry::tests::test_uninstall_skill ... ok
    test skill_runtime::scoring::tests::test_calculate_scores ... ok
    test skill_runtime::scoring::tests::test_recalculate_all ... ok
    test skill_runtime::scoring::tests::test_recommend_skills ... ok
    test skill_sync::tests::test_convert_to_skill ... ok
    test skill_sync::tests::test_extract_description_long ... ok
    test skill_sync::tests::test_extract_description_short ... ok
    test skill_sync::tests::test_extract_description_skips_heading ... ok
    test storage::tests::test_app_context_with_temp_storage ... ok
    test storage::tests::test_repair_tantivy_consistency_detects_orphan ... ok
    test sync::orchestrator::tests::test_sync_orchestrator_new ... ok
    test sync::policy::tests::test_classify_sync_error ... ok
    test sync::policy::tests::test_recommend_sync_action ... ok
    test sync::policy::tests::test_sync_policy_capabilities ... ok
    test sync::policy::tests::test_sync_policy_from_tags ... ok
    test sync::tasks::tests::test_map_action_known ... ok
    test sync::tasks::tests::test_map_action_unknown ... ok
    test sync::tasks::tests::test_write_syncdone_marker ... ok
    test sync::tests::test_assess_safety_blocked_dirty ... ok
    test sync::tests::test_assess_safety_blocked_diverged_conservative ... ok
    test sync::tests::test_assess_safety_diverged_rebase_allowed ... ok
    test sync::tests::test_assess_safety_no_upstream ... ok
    test sync::tests::test_assess_safety_safe_ff ... ok
    test sync::tests::test_assess_safety_up_to_date ... ok
    test sync::tests::test_collect_tasks_default_mode_excludes_untagged ... ok
    test sync::tests::test_collect_tasks_default_mode_includes_known_tags ... ok
    test sync::tests::test_collect_tasks_explicit_filter_includes_untagged ... ok
    test sync::tests::test_map_action ... ok
    test sync::tests::test_perform_merge_fast_forward ... ok
    test sync::tests::test_perform_merge_up_to_date ... ok
    test sync::tests::test_sync_repo_skip_no_syncdone ... ok
    test sync::tests::test_write_syncdone_marker ... ok
    test tui::event::tests::test_tui_action_variants ... ok
    test tui::layout::tests::test_layout_centered ... ok
    test tui::layout::tests::test_layout_compact ... ok
    test tui::layout::tests::test_layout_inner ... ok
    test tui::layout::tests::test_layout_standard ... ok
    test tui::layout::tests::test_layout_wide ... ok
    test tui::render::detail::tests::test_overview_status_desc ... ok
    test tui::render::detail::tests::test_overview_status_icon ... ok
    test tui::render::detail::tests::test_sync_policy_color ... ok
    test tui::render::help::tests::test_help_section_empty ... ok
    test tui::render::help::tests::test_help_section_with_bindings ... ok
    test tui::render::list::tests::test_repo_status_fg ... ok
    test tui::render::list::tests::test_repo_status_icon ... ok
    test tui::render::logs::tests::test_format_log_line_plain ... ok
    test tui::render::logs::tests::test_format_log_line_with_timestamp ... ok
    test tui::render::popups::tests::test_search_results_title_empty ... ok
    test tui::render::popups::tests::test_search_results_title_with_results ... ok
    test tui::render::tests::test_read_repo_summary_found ... ok
    test tui::render::tests::test_read_repo_summary_missing ... ok
    test tui::render::tests::test_read_syncdone_info_missing ... ok
    test tui::render::tests::test_read_syncdone_info_valid ... ok
    test tui::state::tests::test_run_nlp_selected_skill_empty_results ... ok
    test tui::tests::test_detail_tab_label ... ok
    test tui::tests::test_main_view_toggle ... ok
    test tui::tests::test_search_mode_label ... ok
    test tui::tests::test_sort_mode_toggle ... ok
    test tui::theme::tests::test_styles_from_dark_theme ... ok
    test tui::theme::tests::test_theme_dark_colors ... ok
    test tui::theme::tests::test_theme_default_is_dark ... ok
    test tui::theme::tests::test_theme_light_colors ... ok
    test vault::backlinks::tests::test_backlink_index_basic ... ok
    test vault::fs_io::tests::test_read_note_body_with_frontmatter ... ok
    test vault::fs_io::tests::test_read_note_body_without_frontmatter ... ok
    test vault::fs_io::tests::test_read_note_content ... ok
    test vault::fs_io::tests::test_read_note_content_missing ... ok
    test vault::history::tests::test_note_history_basic ... ok
    test vault::history::tests::test_note_history_not_git ... ok
    test vault::indexer::tests::test_index_vault_note_core_add ... ok
    test vault::indexer::tests::test_index_vault_note_core_update ... ok
    test vault::indexer::tests::test_reindex_vault_core_empty ... ok
    test vault::indexer::tests::test_reindex_vault_core_with_notes ... ok
    test vault::scanner::tests::test_scan_vault_basic ... ok
    test vault::scanner::tests::test_scan_vault_empty_dir ... ok
    test vault::scanner::tests::test_scan_vault_missing_dir ... ok
    test watch::tests::test_folder_scheduler_degrades_to_scan ... ok
    test watch::tests::test_folder_scheduler_first_run ... ok
    test watch::tests::test_folder_scheduler_incremental_no_change ... ok
    test watch::tests::test_watch_aggregator_dedup ... ok
    test workflow::executor::tests::test_condition_step_false ... ok
    test workflow::executor::tests::test_condition_step_true ... ok
    test workflow::executor::tests::test_loop_body_continue ... ok
    test workflow::executor::tests::test_loop_body_fallback ... ok
    test workflow::executor::tests::test_loop_empty_collection ... ok
    test workflow::executor::tests::test_loop_failure ... ok
    test workflow::executor::tests::test_loop_multi_iteration ... ok
    test workflow::executor::tests::test_loop_single_iteration ... ok
    test workflow::executor::tests::test_parallel_step ... ok
    test workflow::executor::tests::test_subworkflow_step ... ok
    test workflow::parser::tests::test_parse_basic_workflow ... ok
    test workflow::parser::tests::test_parse_invalid_id ... ok
    test workflow::scheduler::tests::test_linear_schedule ... ok
    test workflow::scheduler::tests::test_parallel_schedule ... ok
    test workflow::scheduler::tests::test_transitive_deps ... ok
    test workflow::scheduler::tests::test_transitive_deps_leaf ... ok
    test workflow::state::tests::test_create_and_update_execution ... ok
    test workflow::state::tests::test_end_to_end_workflow_lifecycle ... ok
    test workflow::state::tests::test_save_and_get_workflow ... ok
    test workflow::validator::tests::test_cycle_detected ... ok
    test workflow::validator::tests::test_loop_body_duplicate_global_id ... ok
    test workflow::validator::tests::test_loop_body_missing_dep ... ok
    test workflow::validator::tests::test_loop_body_valid ... ok
    test workflow::validator::tests::test_missing_dep ... ok
    test workflow::validator::tests::test_valid_dag ... ok

test result: ok. 451 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 11.48s

running 7 tests
test commands::limit::tests::test_run_limit_delete_not_found ... ok
test commands::limit::tests::test_run_limit_seed_and_list_json ... ok
test commands::simple::tests::test_run_vault_list_empty ... ok
test commands::skill::tests::test_run_skill_list_empty ... ok
test commands::skill::tests::test_run_skill_uninstall_not_found ... ok
test commands::workflow::tests::test_run_workflow_delete_not_found ... ok
test commands::workflow::tests::test_run_workflow_list_empty ... ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s

running 11 tests
test test_backup_export ... ok
test test_health_empty_registry ... ok
test test_limit_add_and_list ... ok
test test_limit_list_empty ... ok
test test_registry_backups_empty ... ok
test test_scan_git_repo ... ok
test test_skill_discover ... ok
test test_skill_list_empty ... ok
test test_sync_skips_unmanaged_repo ... ok
test test_tag_enables_sync ... ok
test test_version ... ok

test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.06s

Testing save_repo
Success

Testing list_repos_500
Success

Testing get_health
Success

Testing format_mcp_message
Success

Testing index_repo_full/scale/small
Success
Testing index_repo_full/scale/medium
Success
Testing index_repo_full/scale/full
Success

Testing cosine_similarity/dim/128
Success
Testing cosine_similarity/dim/512
Success
Testing cosine_similarity/dim/768
Success

Testing extract_symbols/lang/rust
Success
Testing extract_symbols/lang/python
Success
Testing extract_symbols/lang/go
Success

Testing parse_cmake_lists/complex
Success

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s 全绿

  • 全绿
  • Tag 已推送

juice094 added 11 commits May 14, 2026 13:47
- VaultClient trait 扩展 build_vault_graph(note_id, depth) 支持 BFS 子图遍历
- build_vault_graph 优先从 SQLite (outgoing_links) 构建,避免每次全量磁盘扫描
- devkit_vault_graph MCP tool 新增 note_id / depth 参数(1-3 跳双向遍历)
- fix(scanner): frontmatter repo 字段从 extra 哈希表读取改为 fm.repo 顶级字段
- 新增 test_vault_graph_bfs_traversal 验证 1 跳/2 跳邻居提取
- Sprint C 最小化:OpLog 查询打印耗时(ms)

447 tests pass
- New vault/history.rs: note_history() + note_diff() using git2
- VaultClient trait + AppContext: get_vault_history() returns commit timeline
- New MCP tool: devkit_vault_history (67th tool) with author/timestamp/insertions/deletions
- CLI:  command
- Tests: unit tests for history module + MCP tool integration test
- Fix: vault/scanner repo frontmatter parsing (fm.repo not extra.get)

450 tests pass
- commands/skill.rs: 移除硬编码 C:\Users\22414\.clarity 路径,改为通用 output_dir 参数
- main.rs: SkillCommands::Sync { target } → Sync { output_dir }
- skill_runtime/clarity_sync.rs:
  - 新增 sync_skills_to_plans() 通用接口(不硬编码子目录)
  - 保留 sync_skills_to_clarity() 向后兼容包装
  - 测试同步更新为调用新接口
- scripts/: devbase-claude.ps1 移至 scripts/claude/(第三方客户端适配示例)
- vault/mod.rs: 修复 clippy warning (.clamp() 替代 .max().min())
- commands/knowledge.rs: 修复临时值生命周期编译错误

450 tests pass
- 明确核心能力不依赖特定 AI 客户端
- 区分核心能力与客户端适配层边界
- 禁止硬编码客户端路径/API/配置格式
- search/hybrid.rs:
  - 新增 HybridSearchMetrics 结构体(latency_ms, keyword_recall, vector_recall, rrf_overlap, keyword_source, rrf_k)
  - 新增 keyword_search_symbols_with_source() 返回后端来源(tantivy/sqlite_fallback)
  - 新增 hybrid_search_symbols_with_metrics() 返回结果+诊断指标
  - 原有 hybrid_search_symbols() 保持向后兼容,内部调用 with_metrics 并丢弃指标
  - 新增 test_hybrid_search_symbols_with_metrics 测试

- registry/knowledge.rs: 新增 WorkspaceRegistry::hybrid_search_symbols_with_metrics() 包装

- mcp/tools/search.rs: 新增 DevkitSearchQualityTool(第68个 MCP tool)
  - 输入: repo_id, query_text, query_embedding(可选), limit
  - 输出: latency_ms, keyword_recall, vector_recall, rrf_overlap, keyword_source, rrf_k

- mcp/mod.rs: 注册 SearchQuality tool(6处)
- mcp/tests.rs: tool count 67→68,新增 devkit_search_quality 存在性断言

451 tests pass
- crates/devbase-vault-wikilink:
  - WikiLink 新增 anchor 字段
  - parse_link 支持 [[note#heading]] 和 [[note#^block-id]] 语法
  - 保留 [[note|display]] 和 [[note#heading|display]] 兼容
  - 新增 3 个测试覆盖 heading/block-id/alias 组合

- registry.rs: VaultNote 新增 block_refs 字段
- registry/vault.rs: save/list/get 支持 block_refs JSON 序列化/反序列化
- vault/scanner.rs: scan 时从 wikilinks 提取 anchor 存入 block_refs
- vault/export.rs:
  - 第一遍扫描提取所有文档 headings
  - 第二遍扫描检测 broken block refs(target 存在但 heading 不存在)
  - 返回结果新增 broken_block_refs 统计
- commands/knowledge.rs: CLI export 输出 broken_block_refs 计数
- 批量修复所有 VaultNote struct literal 测试 fixture

451 tests pass
- search/hybrid.rs:
  - 新增 2 个 #[ignore] 性能回归测试(1k/10k docs)
  - 红线: keyword search < 200ms @ 1k, < 500ms @ 10k
- docs/adr/redis-cache.md:
  - 评估结论: 拒绝引入 Redis
  - 理由: 单用户本地场景下 SQLite+Tantivy 已满足 P99<200ms
  - 替代方案: Tantivy reader 预热、SQLite cache_size、Vault graph 内存缓存
- Cargo.toml: 移除 criterion search_bench(Windows release 锁定冲突)

451 tests pass (5 ignored for perf regression)
- ROADMAP: 阶段十一 v0.20.0 发布,Sprint E/F/G/C 全部标记完成
- README: 版本号 v0.18.0→v0.20.0,tests 437→451,tools 64→68
- README: 新增 Vault 深度能力(history/graph/export/block-ref)
- README: 新增可观测性能力(search_quality, index_health)
- AGENTS: 版本号 v0.19.0-dev→v0.20.0,tools 65→68,tests 446→451
- AGENTS: 新增 v0.20.0 完成里程碑(BFS 图遍历、Git 历史、SearchQuality、Block 引用、性能基线、Client-Agnostic)
- AGENTS: 技术债更新(Vault 无版本历史→已解决,tree-sitter/flags→绿色)
@juice094 juice094 merged commit 10e6b49 into main May 14, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant